Modern home video games are more exciting and realistic than ever before. Relatively inexpensive 3D home video game platforms contain as much processing power as advanced computer graphics workstations of yesteryear. They can dynamically, interactively produce rich, realistic interesting displays of characters and other objects moving about in and interacting with a simulated three-dimensional world. From your living room on a home color television set, you can now fly virtual fighter planes and spacecraft through simulated battles, drive virtual race cars over simulated race tracks, ride virtual snowboards over simulated snow fields and ski slopes, race simulated jet skis over simulated water surfaces, and journey through exciting virtual worlds encountering all sorts of virtual characters and situations—just to name a few examples—all with highly realistic and exciting 3D images.
While home video game systems are now relatively powerful, even the most advanced home video game system lacks the processing resources that video game designers dream about. Home video game systems, after all, must be affordable yet have the extremely demanding task of producing high quality images dynamically and very rapidly (e.g., thirty or sixty frames per second). They must respond in real-time to user controls—reacting essentially instantaneously from the standpoint of the user. At the same time, video game developers and their audiences continually desire ever richer, more complex, more realistic images. More complicated and detailed images place exceedingly high demands on relatively inexpensive video game system processors and other internal circuitry. If the image is too complicated, the video game platform will not be able to render it in the time available. This can sometimes result in incomplete, only partially rendered images that may appear flawed and unrealistic and thus disappoint users.
One approach to help solve this problem involves pre-rendering complicated scenes in advance and then adapting or otherwise manipulating those scenes in real-time to provide interactive video game play. For example, it is possible for a video game designer at the time he or she creates a video game to use a very powerful computer to pre-calculate and pre-render background scenery and other images. Developing a new video game can sometimes take a year or more, so using a high-power computer graphics workstation or even a supercomputer for hours at a time to render individual complicated background images is feasible. Such interesting and complicated background images are then often essentially “pasted” onto 3D surfaces through use of texture mapping during real-time video game play. This technique can be used to provide rich and interesting background and other video game play elements without a corresponding substantial increase in real-time processing overhead.
While such pre-rendered texture maps have been used with substantial advantageous results in the past, they have some shortcomings in interactive video game play. For example, texture-mapping a pre-rendered image onto a 3D surface during interactive video game play can successfully create impressive visual complexity but may let down the user who wants his or her video game character or other moving object to interact with that complexity. The tremendous advantageous 3D video games have over 2D video games is the ability of moving objects to interact in three dimensions with other elements in the scene. Pre-rendered textures, in contrast, are essentially 2D images that are warped or wrapped onto 3D surfaces but still remain two-dimensional. One analogy that is apt for at least some applications is to think of a texture as being like a complex photograph pasted onto a billboard. From a distance, the photograph can look extremely realistic. However, if you walk up and touch the billboard you will immediately find out that the image is only two dimensional and cannot be interacted with in three dimensions.
We have discovered a unique way to solve this problem in the context of real-time interactive video game play. Just as Alice was able to travel into a 3D world behind her mirror in the story “Alice Through the Looking Glass”, we have developed a video game play technique that allows rich pre-rendered images to create 3D worlds with depth.
In one embodiment, we use a known technique called cube mapping to pre-render images defining a 3D scene. Cube mapping is a form of environment mapping that has been used in the past to provide realistic reflection mapping independent of viewpoint. For example, one common usage of environment mapping is to add realistic reflections to a 3D-rendered scene. Imagine a mirror hanging on the wall. The mirror reflects the scene in the room. As the viewer moves about the room, his or her viewpoint changes so that different objects in the room become visible in the mirror. Cube mapping has been used in the past or provide these and other reflection effects.
We use cube mapping for a somewhat different purpose—to pre-render a three-dimensional scene or universe such as for example a landscape, the interior of a great cathedral, a castle, or any other desired realistic or fantastic scene. We then add depth to the pre-rendered scene by creating and supplying a depth buffer for each cube-mapped image. The depth buffer defines depths of different objects depicted in the cube map. Using the depth buffer in combination with the cube map allows moving objects to interact with the cube-mapped image in complex, three-dimensional ways. For example, depending upon the effect desired, moving objects can obstruct or be obstructed by some but not other elements depicted in the cube map and/or collide with such elements. The resulting depth information supplied to a panoramically-composited cube map provides a complex interactive visual scene with a degree of 3D realism and interactivity not previously available in conventional strictly 2D texture mapped games.